{
  // PACKAGES Structure like tree, only have one root.
  Base : [{
      System : {
        //CAPTION for international usage
        //PREDEF for overrides usage
        KEYWORDS : [ABSTRACT, CONCRETE, TYPE, STEREOTYPE, PREDEF, ASPECT, INSTANCEABLE, HEADER, DEFAULT,
          PK, REFERENCE, CAPTION, DOMAIN, STRING(), TEXT, DATETIME, NUMBER],
        CurrentDate : DATETIME,
        EffectiveDate : DATETIME
      }
    }, {
      /*
       * CONCRETE default to entity without child.
       * ABSTRACT default to entity has child.
       */
      CONCRETE : {
        Id : KEY,
        PK : [Id]
      }
    }, {
      // Instanceable has two type class and instance.
      // Class will suffix the Definition.
      INSTANCEABLE : {
        TYPE : [STEREOTYPE],
        REFERENCE : CLASS(Definition)
      }
    }, {
      // ASPECT leeche to Instanceable
      Activity : {
        TYPE : [ASPECT, INSTANCEABLE(Log), Audit],
        Name < HEADER >  : [ModelCode],
        Frequence < HEADER >  : [ModelCode],
        OccurrenceTime < DEFAULT >  : DATETIME[],
        EndTime : DATETIME,
        ActivityMessage : TEXT
      }
    }, {
      BillOfMaterials : {
        TYPE : [STEREOTYPE],
        Parent : [BillOfMaterials],
        Level : NUMBER
      }
    }, {
      // Audit should only happen on the Root level.
      Audit : {
        TYPE : [STEREOTYPE],
        LastUpdateDateTime : DATETIME,
        LastUpdateBy : STRING(128)
      }
    }, {
      NameValue : {
        TYPE : [PREDEF],
        Domain : DOMAIN,
        Code : STRING(128),
        Description : [CAPTION]
      }
    }, {
      ModelCode : {
        TYPE : [STEREOTYPE],
        Domain : DOMAIN,
        Code : STRING(128),
        Description : [CAPTION]
      }
    }, {
      ModelCategory : {
        TYPE : [STEREOTYPE, BillOfMaterials],
        Domain : DOMAIN,
        Code : STRING(128),
        Description : [CAPTION]
      }
    }
  ],
  FinanceBase : [{
      // ISO 4217
      // Should Have Top or Bottom conversion behavior
      // Top = Convert to the basic first, then process
      // Bottom = Process first then convert to basic
      Currency : {
        TYPE : [BUILDIN],
        PK : [Code],
        Currency : [NameValue(3)]
      }
    }, {
      // JSR 354 TBD
      // Prefer long over BigDecimal
      Money : {
        TYPE : [BUILDIN],
        Currency : Currency
      }
    }, {
      ExchangeRate : {
        TYPE : [Audit],
        Source : Currency,
        Target : Currency,
        EffectiveDate : DATE,
        Rate : DECIMAL(12, 6)
      }
    }, {
      AccountDefinition : {
        // BOM for controlling account (general ledger) and subsidiary ledger
        // Asset + Expense (D increase) = Liability + Equity + Revenue (C increase)
        TYPE : [Audit, BillOfMaterials],
        AdType : [NameValue],
        REFERENCE : [OrganizationalUnit],
        Currency : Currency
      }
    }, {
      OrganizationalUnit : {
        TYPE : [Audit, BillOfMaterials],
        OuType : [NameValue]
      }
    }, {
      // Screen where transactions happened
      Journal : {
        TYPE : [Audit],
        Journal : [ModelCode]
      }
    }, {
      Transaction : {
        TYPE : [Audit],
        REFERENCE : [Journal],
        EffectiveDate : DATE,
        Notes : TEXT,
        Details : {
          TransactionDetial : {
            REFERENCE : [AccountDefinition],
            Amount : Money
          }
        }
      }
    }, {
      Budget : {
        TYPE : [BillOfMaterials],
        REFERENCE : [AccountDefinition],
        Amount : Money
      }
    }
  ],
  Scheduler : [{
      Project : {
        Name : String(180),
        REFERENCE : [Linkage]
      }
    }, {
      Linkage : {
        TYPE : [BillOfMaterials],
        REFERENCE : [Task[], Resource[]],
        ProjectTask : Task[]
      }
    }, {
      Task : {
        TYPE : [Activity]
      }
    }, {
      // Resource as constrain to task
      Resource : {
        TYPE : [Activity]
      }
    }, {
      // Pass from instance, future from definition
      Calendar : {
        EventName : TEXT,
        OccurenceTime : DATETIME,
        EndTime : DATETIME,
        REFERENCE : [Project[], Task[], Resource[]]
      }
    }
  ]
}
